define(["../Core/defaultValue", "../Core/defined", "../Core/defineProperties", "../Core/DeveloperError", "../Core/Event", "./createPropertyDescriptor", "./NodeTransformationProperty", "./PropertyBag", "../Core/createGuid"], function(i, o, t, e, s, n, r, h, l) {
  "use strict";
  function a(i) {
    return new r(i)
  }
  function d(o) {
    this._show = void 0,
      this._showSubscription = void 0,
      this._scale = void 0,
      this._scaleSubscription = void 0,
      this._minimumPixelSize = void 0,
      this._minimumPixelSizeSubscription = void 0,
      this._maximumScale = void 0,
      this._maximumScaleSubscription = void 0,
      this._incrementallyLoadTextures = void 0,
      this._incrementallyLoadTexturesSubscription = void 0,
      this._shadows = void 0,
      this._shadowsSubscription = void 0,
      this._uri = void 0,
      this._uriSubscription = void 0,
      this._runAnimations = void 0,
      this._clampAnimations = void 0,
      this._runAnimationsSubscription = void 0,
      this._nodeTransformations = void 0,
      this._nodeTransformationsSubscription = void 0,
      this._heightReference = void 0,
      this._heightReferenceSubscription = void 0,
      this._distanceDisplayCondition = void 0,
      this._distanceDisplayConditionSubscription = void 0,
      this._silhouetteColor = void 0,
      this._silhouetteColorSubscription = void 0,
      this._silhouetteSize = void 0,
      this._silhouetteSizeSubscription = void 0,
      this._color = void 0,
      this._colorSubscription = void 0,
      this._colorBlendMode = void 0,
      this._colorBlendModeSubscription = void 0,
      this._colorBlendAmount = void 0,
      this._colorBlendAmountSubscription = void 0,
      this._clippingPlanes = void 0,
      this._clippingPlanesSubscription = void 0,
      this._imageBasedLightingFactor = void 0,
      this._imageBasedLightingFactorSubscription = void 0,
      this._lightColor = void 0,
      this._lightColorSubscription = void 0,
      this._definitionChanged = new s,
      this.merge(i(o, i.EMPTY_OBJECT))
  }
  return t(d.prototype, {
    definitionChanged: {
      get: function() {
        return this._definitionChanged
      }
    },
    show: n("show"),
    scale: n("scale"),
    minimumPixelSize: n("minimumPixelSize"),
    maximumScale: n("maximumScale"),
    incrementallyLoadTextures: n("incrementallyLoadTextures"),
    shadows: n("shadows"),
    uri: n("uri"),
    runAnimations: n("runAnimations"),
    clampAnimations: n("clampAnimations"),
    nodeTransformations: n("nodeTransformations", void 0, function(i) {
      return new h(i,a)
    }),
    heightReference: n("heightReference"),
    distanceDisplayCondition: n("distanceDisplayCondition"),
    silhouetteColor: n("silhouetteColor"),
    silhouetteSize: n("silhouetteSize"),
    color: n("color"),
    colorBlendMode: n("colorBlendMode"),
    colorBlendAmount: n("colorBlendAmount"),
    clippingPlanes: n("clippingPlanes"),
    imageBasedLightingFactor: n("imageBasedLightingFactor"),
    lightColor: n("lightColor")
  }),
    d.prototype.clone = function(i) {
      return o(i) ? (i.show = this.show,
        i.scale = this.scale,
        i.minimumPixelSize = this.minimumPixelSize,
        i.maximumScale = this.maximumScale,
        i.incrementallyLoadTextures = this.incrementallyLoadTextures,
        i.shadows = this.shadows,
        i.uri = this.uri,
        i.runAnimations = this.runAnimations,
        i.clampAnimations = this.clampAnimations,
        i.nodeTransformations = this.nodeTransformations,
        i.heightReference = this._heightReference,
        i.distanceDisplayCondition = this.distanceDisplayCondition,
        i.silhouetteColor = this.silhouetteColor,
        i.silhouetteSize = this.silhouetteSize,
        i.color = this.color,
        i.colorBlendMode = this.colorBlendMode,
        i.colorBlendAmount = this.colorBlendAmount,
        i.clippingPlanes = this.clippingPlanes,
        i.imageBasedLightingFactor = this.imageBasedLightingFactor,
        i.lightColor = this.lightColor,
        i) : new d(this)
    }
    ,
    d.prototype.merge = function(t) {
      if (!o(t))
        throw new e("source is required.");
      // t && t.uri && -1 === t.uri.indexOf("uuid") && (t.uri = -1 !== t.uri.indexOf("?") ? t.uri + "&uuid=" + l() : t.uri + "?uuid=" + l()),
        this.show = i(this.show, t.show),
        this.scale = i(this.scale, t.scale),
        this.minimumPixelSize = i(this.minimumPixelSize, t.minimumPixelSize),
        this.maximumScale = i(this.maximumScale, t.maximumScale),
        this.incrementallyLoadTextures = i(this.incrementallyLoadTextures, t.incrementallyLoadTextures),
        this.shadows = i(this.shadows, t.shadows),
        this.uri = i(this.uri, t.uri),
        this.runAnimations = i(this.runAnimations, t.runAnimations),
        this.clampAnimations = i(this.clampAnimations, t.clampAnimations),
        this.heightReference = i(this.heightReference, t.heightReference),
        this.distanceDisplayCondition = i(this.distanceDisplayCondition, t.distanceDisplayCondition),
        this.silhouetteColor = i(this.silhouetteColor, t.silhouetteColor),
        this.silhouetteSize = i(this.silhouetteSize, t.silhouetteSize),
        this.color = i(this.color, t.color),
        this.colorBlendMode = i(this.colorBlendMode, t.colorBlendMode),
        this.colorBlendAmount = i(this.colorBlendAmount, t.colorBlendAmount),
        this.clippingPlanes = i(this.clippingPlanes, t.clippingPlanes),
        this.imageBasedLightingFactor = i(this.imageBasedLightingFactor, t.imageBasedLightingFactor),
        this.lightColor = i(this.lightColor, t.lightColor);
      var s = t.nodeTransformations;
      if (o(s)) {
        var n = this.nodeTransformations;
        o(n) ? n.merge(s) : this.nodeTransformations = new h(s,a)
      }
    }
    ,
    d
});
